# SSN - util
# Copyright (c) 2009, jonoerik
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following
# conditions are met:
#
#    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following
#	disclaimer.
#    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
#	disclaimer in the documentation and/or other materials provided with the distribution.
#    * The names of contributors may not be used to endorse or promote products derived from this software without specific
#	prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
# BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.

#utils
#general useful functions and classes

#library imports
from sys import path as syspath
syspath.append('.//libtcod-1.4.1')
import libtcodpy as libtcod
import numpy

from random import randint as rand

def alltiles(w, h, x=0, y=0):
    '''returns a list of co-ordinate tuples for each tile on a map of Width x Height
    this allows for much simpler loops for performing an action on each cell of an array'''
    #the list of co-ordinates [(x, y), (x, ...
    l = []
    for cy in xrange(y, y+h):
        for cx in xrange(x, x+w):
            l.append((cx, cy))
    return l

class rect:
    '''a rectangular area of a grid
    x and y begin at 0'''
    
    def __init__(self, nx, ny, nw, nh):
        self.x = nx
        self.y = ny
        self.w = nw
        self.h = nh
    
    def alltiles(self):
        return alltiles(self.w, self.h, self.x, self.y)
    
    def contains_point(self, point):
        '''returns true if point (x, y) is in the rectangle'''
        return point[0] >= self.x and point[0] < self.x + self.w and point[1] >= self.y and point[1] < self.y + self.h
    
    def point_is_on_edge(self, point):
        '''returns true if point (x, y) is on the inside border of the rectangle
        this border is contained by the rectangle, and is 1 tile wide'''
        if point[0] == self.x or point[0] == self.x + self.w - 1:
            if point[1] >= self.y and point[1] < self.y + self.h:
                return True
        if point[1] == self.y or point[1] == self.y + self.h - 1:
            if point[0] >= self.x and point[0] < self.x + self.w:
                return True
        #else
        return False
    
    def point_is_on_corner(self, point):
        '''returns true if point (x, y) is in one of the 4 corners of the rectangle'''
        if point[0] == self.x or point[0] == self.x + self.w - 1:
            if point[1] == self.y or point[1] == self.y + self.h - 1:
                return True
        #else
        return False